public class Num009 {
    /**
     * 乘机小于k的子数组
     * @param nums 整体数组
     * @param k 极值
     * @return 返回子数组的个数
     */
    public int numSubarrayProductLessThanK(int[] nums, int k) {
        long pro = 1;
        int left = 0;
        int count = 0;
        //循环
        for (int right = 0; right < nums.length; right++) {
            //1.先从数组第一个位置开始一只向后累乘
            pro *= nums[right];
            //2.如果累乘到子数组乘积大于k，开始从前面除出去
            while (left <= right && pro >= k){
                pro /= nums[left++];
            }
            //3.当找到了最大子集结束第一次循环，此时统计个数，有多少个元素，那么数组集里面的元素的所有子集都是目标子集
            count += right >= left ? right - left + 1 : 0;
        }
        //结束循环，返回count
        return count;
    }
}
